From: Georges Basile Stavracas Neto Date: Fri, 8 Jan 2021 21:12:52 +0000 (-0300) Subject: workspacesView/workspacesDisplay: Handle smooth events X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~616^2^2~558 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=08ac3c775002c0b3ac2481b4dca6f37713e9718a;p=gnome-shell.git workspacesView/workspacesDisplay: Handle smooth events On X11, the scroll handler can receive smooth events, which should trigger a workspace switch. Handle smooth events by checking their scroll delta, and adjusting the direction depending on these deltas. Fixes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1614 Part-of: --- diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js index 8fc21c40d..99a1e6597 100644 --- a/js/ui/workspacesView.js +++ b/js/ui/workspacesView.js @@ -771,11 +771,27 @@ class WorkspacesDisplay extends St.Widget { if (event.is_pointer_emulated()) return Clutter.EVENT_PROPAGATE; + let direction = event.get_scroll_direction(); + if (direction === Clutter.ScrollDirection.SMOOTH) { + const [dx, dy] = event.get_scroll_delta(); + if (Math.abs(dx) > Math.abs(dy)) { + direction = dx < 0 + ? Clutter.ScrollDirection.RIGHT + : Clutter.ScrollDirection.LEFT; + } else if (Math.abs(dy) > Math.abs(dx)) { + direction = dy < 0 + ? Clutter.ScrollDirection.UP + : Clutter.ScrollDirection.DOWN; + } else { + return Clutter.EVENT_PROPAGATE; + } + } + let workspaceManager = global.workspace_manager; const vertical = workspaceManager.layout_rows === -1; let activeWs = workspaceManager.get_active_workspace(); let ws; - switch (event.get_scroll_direction()) { + switch (direction) { case Clutter.ScrollDirection.UP: if (vertical) ws = activeWs.get_neighbor(Meta.MotionDirection.UP);